/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2009，所有权利保留。
 * 
 * 项目名：	rumba-widget2
 * 文件名：	RValidator.java
 * 模块说明：	
 * 修改历史：
 * Jan 28, 2009 - lxm - 创建。
 */
package com.hd123.rumba.gwt.widget2.client.form;

import com.google.gwt.user.client.ui.Widget;

/**
 * 表单域验证器
 * 
 * @author lxm
 * 
 */
public interface RValidator {

  /**
   * 验证表单域的值。
   * 
   * @param sender
   *          表单域。
   * @param value
   *          被验证的值。
   * @return 返回null或者“信息”级别的验证结果表示验证通过，否则认为不通过。
   */
  public ValidResult validate(Widget sender, String value);

  /**
   * 验证结果
   * 
   * @author lxm
   * 
   */
  public static class ValidResult {

    /**
     * 创建一个“错误”级别的验证结果。
     * 
     * @param message
     *          指定验证结果信息。
     * @return
     */
    public static ValidResult error(String message) {
      return new ValidResult(ValidLevel.error, message);
    }

    /**
     * 创建一个“警告”级别的验证结果。
     * 
     * @param message
     *          指定验证结果信息。
     * @return
     */
    public static ValidResult warning(String message) {
      return new ValidResult(ValidLevel.warning, message);
    }

    /**
     * 创建一个“信息”级别的验证结果。
     * 
     * @param message
     *          指定验证结果信息。
     * @return
     */
    public static ValidResult info(String message) {
      return new ValidResult(ValidLevel.info, message);
    }

    private ValidResult(ValidLevel level, String message) {
      super();
      this.level = level;
      this.message = message;
    }

    private ValidLevel level;
    private String message;

    /** 级别 */
    public ValidLevel getLevel() {
      return level;
    }

    /** 信息 */
    public String getMessage() {
      return message;
    }

    /**
     * 是否验证通过
     * 
     * @return
     */
    public boolean isValid() {
      return level.equals(ValidLevel.info);
    }
  }

  /**
   * 验证结果级别
   * 
   * @author lxm
   * 
   */
  public static class ValidLevel {

    /** 标记验证结果级别为“信息”。该级别被认为是验证通过。 */
    public static final ValidLevel info = new ValidLevel("info");
    /** 标记验证结果级别为“警告”。该级别被认为是验证不通过。 */
    public static final ValidLevel warning = new ValidLevel("warning");
    /** 标记验证结果级别为“错误”。该级别被认为是验证不通过。 */
    public static final ValidLevel error = new ValidLevel("error");

    private ValidLevel(String name) {
      super();
      this.name = name;
    }

    private String name;

    /**
     * 取得名称。
     * 
     * @return
     */
    public String getName() {
      return name;
    }
  }

}
